/* 出力Plug-in 仕様（暫定版）2000.01.26 */
/* 2000.03.30 説明を補足 */
/* 2001.07.08
  CreatePicture はメモリハンドル渡しの他にメモリアドレス渡しを追加。
*/

#ifndef EXP_API_H
#define EXP_API_H

#ifdef _WIN32
#define _export __declspec(dllexport)
#endif

#include <windows.h>

#ifdef __cplusplus
extern "C" {
#endif

/* ----- Plug-inに関する情報を得る ----------------------------------
 * GetPluginInfo(int infono, char *buff, int buflen)
 *    Parameter:
 *      int infono : 取得する情報番号
 *                      0   : Plug-in APIバージョン
 *                      1   : Plug-in名、バージョン及び copyright
 *                      2   : ファイル形式名
 *                      3   : 代表的な拡張子(ひとつだけ)
 *                     4以降: 予約
 *      char *buf    : 情報を納めるバッファ
 *      int buflen : バッファ長(byte)
 *
 *    Return:
 *      バッファに書き込んだ文字数を返します。
 *      情報番号が無効の場合、0を返します。
 *
 *    解説:
 *      だいたいSusieプラグインに準拠...
 *      バージョン番号は基本的に4byteのコードで以下の意味を持ちます。
 *
 *      T0 X N
 *      ~T T T
 *       | | +-- N : Normal
 *       | +---- X : Export filter
 *       +------ Virsion No.
 *
 */
int _export __stdcall GetPluginInfo (int infono, char *buf, int buflen);


/* ---- 対応可能なファイル形式か確認 ----------------
 * IsSupported(int colorDepth);
 *    Parameter:
 *      colorDepth : 画素当たりのbit数
 *
 *    Return:
 *      対応可能であれば非0を返す。
 */
int _export __stdcall IsSupported (int colorDepth);


#pragma pack(push)
#pragma pack(1)
//Susie Plug-inのものに同じ
typedef struct PictureInfo
{
    long left,top;      /* 画像を展開する位置 */
    long width;         /* 画像の幅(pixel) */
    long height;        /* 画像の高さ(pixel) */
    WORD x_density;     /* 画素の水平方向密度 */
    WORD y_density;     /* 画素の垂直方向密度 */
    short colorDepth;   /* 画素当たりのbit数 */
    HLOCAL hInfo;       /* 画像内のテキスト情報 */
} PictureInfo;
#pragma pack(pop)


/* ----- 画像を変換して保存する ---------------------------------------------
 * CreatePicture(
 *            char *filepath, unsigned int flag,
 *            HANDLE *pHBInfo,HANDLE *pHBm, PictureInfo *lpInfo,
 *  int (CALLBACK *lpPrgressCallback)(int,int,long),
 *              long lData);
 *
 *    Parameter:
 *      char *filepath : 保存するファイルのパス
 *      unsigned int flag : 追加情報
 *             0 : pHBInfo, pHBm はメモリハンドルへのポインタ(HLOCAL *)
 *             1 : pHBInfo, pHBm はメモリアドレス(BITMAPINFO *, char *)
 *      HLOCAL *pHBInfo : BITMAPINFO 構造体が納められたメモリ
 *      HLOCAL *pHBm    : ビットマップデータ本体のメモリ
 *      PictureInfo *lpInfo : PictureInfo構造体へのポインタ
 *                        注意！：lpInfo->hInfo のみ使用すること
 *      FARPROC lpPrgressCallback :
 *                途中経過を表示するコールバック関数へのポインタ。
 *                NULLの場合、plug-inは処理が終了するまでプロセスを占有し、
 *                中断も出来ません。
 *                コールバック関数のprototype:
 *                  int PASCAL ProgressCallback(
 *                                        int nNum,int nDenom,long lData);
 *                  まず nNum==0 でコールされ、nNum==nDenom になるまで
 *                  定期的に呼ばれる。
 *                  戻値が 非0 の時、Plug-inは処理を中断する。
 *      long lData : コールバック関数に渡すlongデータ。
 *                  ポインタ等を必要に応じて受け渡せる。
 *
 *    Return:
 *      エラーコード。0なら正常終了。
 *      pHBInfo, pHBm, lpInfoはSusie Plug-inが変換した情報が入っている。
 *
 *    解説:
 *      プラグインは画像を変換して保存する。
 */
int _export __stdcall CreatePicture (
                char *filepath, unsigned int flag,
                HANDLE *pHBInfo, HANDLE *pHBm, PictureInfo *lpInfo,
    int (CALLBACK *lpPrgressCallback)(int,int,long),
                long lData);


/* ---- Plug-inの設定ダイアログ ------------------------------------
 * ConfigurationDlg(HWND parent,int fnc);
 *
 *    Parameter:
 *      HWND parent : 親ウィンドウのHWND
 *      int fnc     : 機能コード
 *                    0    : Plug-inのaboutダイアログ表示(必要であれば)
 *                    1    : 設定ダイアログ表示
 *                    2以降: 予約
 *
 *    Return:
 *      エラーコード。
 *          0: 正常終了
 *         -1: インプリメントしていない
 *
 *
 */
int _export __stdcall ConfigurationDlg(HWND parent,int fnc);


/*-------------------------------------------------------------------------*/
/* エラーコード                                                            */
/*-------------------------------------------------------------------------*/
#define XPI_NO_FUNCTION       -101  /* その機能はインプリメントされていない */
#define XPI_ALL_RIGHT            0  /* 正常終了 */
#define XPI_ABORT              101  /* コールバック関数が非0を返したので展開を中止した */
#define XPI_NOT_SUPPROT        102  /* 未知のフォーマット */
#define XPI_OUT_OF_ORDER       103  /* データが壊れている */
#define XPI_NO_MEMORY          104  /* メモリーが確保出来ない */
#define XPI_MEMORY_ERROR       105  /* メモリーエラー */
#define XPI_FILE_READ_ERROR    106  /* ファイルリードエラー */
#define	XPI_WINDOW_ERROR       107  /* 窓が開けない */
#define XPI_OTHER_ERROR        108  /* 内部エラー */
#define	XPI_FILE_WRITE_ERROR   109  /* 書き込みエラー */
#define	XPI_END_OF_FILE        110  /* ファイル終端 */

#ifdef __cplusplus
}
#endif

#endif /* EXP_API_H */
